uniform float rad; // 0.01
uniform float intensity;	// 50.0
uniform sampler2D deep;
varying vec4 pos;
uniform sampler2D color;

vec3 fk3f[16];

void main(void)
{
	vec4 sum;
	vec4 bl = vec4(0,0,0,0);
	int i=0;
	fk3f[ 0] = vec3(0.527837, -0.085868 ,0.527837);
	fk3f[ 1] = vec3(-0.040088, 0.536087, -0.040088);
	fk3f[ 2] = vec3(-0.670445, -0.179949, -0.670445);
	fk3f[ 3] = vec3(-0.419418, -0.616039, -0.419418);
	fk3f[ 4] = vec3(0.440453, -0.639399, 0.440453);
	fk3f[ 5] = vec3(-0.757088, 0.349334, -0.757088);
	fk3f[ 6] = vec3(0.574619, 0.685879,0.574619);
	fk3f[ 7] = vec3(0.03851, -0.939059, 0.03851);
	fk3f[ 8] = vec3(0.527837, -0.085868 ,0.527837);
	fk3f[ 9] = vec3(-0.040088, 0.536087, -0.040088);
	fk3f[10] = vec3(-0.670445, -0.179949, -0.670445);
	fk3f[11] = vec3(-0.419418, -0.616039, -0.419418);
	fk3f[12] = vec3(0.440453, -0.639399, 0.440453);
	fk3f[13] = vec3(-0.757088, 0.349334, -0.757088);
	fk3f[14] = vec3(0.574619, 0.685879,0.574619);
	fk3f[15] = vec3(0.03851, -0.939059, 0.03851);

	///// occlusion = 1/( 1 + 2500*max{dist,0)^2 )		
	bl = vec4(0,0,0,0);
	float ez = texture2D( deep, gl_TexCoord[0].xy).x;
	for( int i=0; i<16; i++ )
	{
		float sz = texture2D( deep, gl_TexCoord[0].xy + fk3f[i].xy*rad).x;
		bl += max(min(ez-sz, 0.005), 0.0);
	}
	bl = 1.0-bl*intensity/8.0;		
	sum = bl;
	if (gl_TexCoord[0].x<0.5)
		gl_FragColor = texture2D( deep, gl_TexCoord[0].xy);
	else
	{
		//gl_FragColor = sum;
		texture2D( color, gl_TexCoord[0].xy); // dirty hack
		gl_FragColor = texture2D( color, gl_TexCoord[0].xy);
	}
}